--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / tests / backend / test_media_sticker_reaction_gif_security.py
Displaying Raw • Download
tests/backend/test_media_sticker_reaction_gif_security.py master (f0f6ed57) Text, 6.19 KB
T8b949e# SPDX-License-Identifier: 0BSD
T8b949e"""Fuzz and security-style tests for stickers, GIFs, reactions, and related sanitizers."""
Tff7b72import T7ee787base64
Tff7b72import T7ee787os
Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3MagicMock
Tff7b72import T7ee787LXMF
Tff7b72import T7ee787pytest
Tff7b72from T7ee787hypothesis Tff7b72import Te6edf3givenTb4b4b4, Te6edf3settings
Tff7b72from T7ee787hypothesis Tff7b72import Te6edf3strategies Tff7b72as Te6edf3st
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backend Tff7b72import Tb4b4b4(
Te6edf3gif_utilsTb4b4b4,
Te6edf3lxmf_utilsTb4b4b4,
Te6edf3sticker_pack_utilsTb4b4b4,
Te6edf3sticker_utilsTb4b4b4,
Tb4b4b4)
Te6edf3_TINY_GIF Tff7b72= Tb4b4b4(
Ta5d6ffbTa5d6ff"Ta5d6ffGIF89aTffea00\x01Tffea00\x00Tffea00\x01Tffea00\x00Tffea00\x80Tffea00\x00Tffea00\x00Ta5d6ff"
Ta5d6ffbTa5d6ff"Tffea00\xffTffea00\xffTffea00\xffTffea00\x00Tffea00\x00Tffea00\x00Ta5d6ff!Tffea00\xf9Tffea00\x04Tffea00\x01Tffea00\x00Tffea00\x00Tffea00\x00Tffea00\x00Ta5d6ff"
Ta5d6ffbTa5d6ff"Ta5d6ff,Tffea00\x00Tffea00\x00Tffea00\x00Tffea00\x00Tffea00\x01Tffea00\x00Tffea00\x01Tffea00\x00Tffea00\x00Tffea00\x02Tffea00\x02Ta5d6ffDTffea00\x01Tffea00\x00Ta5d6ff;Ta5d6ff"
Tb4b4b4)
Te6edf3_TINY_PNG Tff7b72= Tb4b4b4(
Ta5d6ffbTa5d6ff"Tffea00\x89Ta5d6ffPNGTffea00\rTffea00\nTffea00\x1aTffea00\nTffea00\x00Tffea00\x00Tffea00\x00Tffea00\rTa5d6ffIHDRTffea00\x00Tffea00\x00Tffea00\x00Tffea00\x01Tffea00\x00Tffea00\x00Tffea00\x00Tffea00\x01Ta5d6ff"
Ta5d6ffbTa5d6ff"Tffea00\x08Tffea00\x06Tffea00\x00Tffea00\x00Tffea00\x00Tffea00\x1fTffea00\x15Tffea00\xc4Tffea00\x89Tffea00\x00Tffea00\x00Tffea00\x00Tffea00\nTa5d6ffIDATxTffea00\x9cTa5d6ffcTffea00\x00Tffea00\x01Ta5d6ff"
Ta5d6ffbTa5d6ff"Tffea00\x00Tffea00\x00Tffea00\x05Tffea00\x00Tffea00\x01Tffea00\rTffea00\nTa5d6ff-Tffea00\xb4Tffea00\x00Tffea00\x00Tffea00\x00Tffea00\x00Ta5d6ffIENDTffea00\xaeTa5d6ffB`Tffea00\x82Ta5d6ff"
Tb4b4b4)
Tf0883e@settingsTb4b4b4(Te6edf3max_examplesTff7b72=T79c0ff150Tb4b4b4, Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4)
Tf0883e@givenTb4b4b4(Te6edf3sTff7b72=Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff5000Tb4b4b4, Te6edf3alphabetTff7b72=Te6edf3stTff7b72.Td2a8ffcharactersTb4b4b4(Te6edf3blacklist_categoriesTff7b72=Tb4b4b4(Ta5d6ff"Ta5d6ffCsTa5d6ff"Tb4b4b4,Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fftest_sanitize_sticker_name_fuzzingTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3out Tff7b72= Te6edf3sticker_utilsTff7b72.Td2a8ffsanitize_sticker_nameTb4b4b4(Te6edf3sTb4b4b4)
Tff7b72assert Te6edf3out Tff7b72is Tff7b72None Tff7b72or Tb4b4b4(
Tffa657isinstanceTb4b4b4(Te6edf3outTb4b4b4, Tffa657strTb4b4b4) Tff7b72and Tffa657lenTb4b4b4(Te6edf3outTb4b4b4) Tff7b72<Tff7b72= T79c0ff128 Tff7b72and Tffa657allTb4b4b4(Te6edf3cTff7b72.Td2a8ffisprintableTb4b4b4(Tb4b4b4) Tff7b72for Te6edf3c Tff7b72in Te6edf3outTb4b4b4)
Tb4b4b4)
Tf0883e@settingsTb4b4b4(Te6edf3max_examplesTff7b72=T79c0ff150Tb4b4b4, Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4)
Tf0883e@givenTb4b4b4(Te6edf3sTff7b72=Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff500Tb4b4b4, Te6edf3alphabetTff7b72=Te6edf3stTff7b72.Td2a8ffcharactersTb4b4b4(Te6edf3blacklist_categoriesTff7b72=Tb4b4b4(Ta5d6ff"Ta5d6ffCsTa5d6ff"Tb4b4b4,Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fftest_sanitize_sticker_emoji_fuzzingTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3out Tff7b72= Te6edf3sticker_utilsTff7b72.Td2a8ffsanitize_sticker_emojiTb4b4b4(Te6edf3sTb4b4b4)
Tff7b72assert Te6edf3out Tff7b72is Tff7b72None Tff7b72or Tb4b4b4(
Tffa657isinstanceTb4b4b4(Te6edf3outTb4b4b4, Tffa657strTb4b4b4) Tff7b72and Tffa657lenTb4b4b4(Te6edf3outTb4b4b4) Tff7b72<Tff7b72= T79c0ff16 Tff7b72and Tffa657allTb4b4b4(Te6edf3cTff7b72.Td2a8ffisprintableTb4b4b4(Tb4b4b4) Tff7b72for Te6edf3c Tff7b72in Te6edf3outTb4b4b4)
Tb4b4b4)
Tf0883e@settingsTb4b4b4(Te6edf3max_examplesTff7b72=T79c0ff120Tb4b4b4, Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4)
Tf0883e@givenTb4b4b4(Te6edf3sTff7b72=Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff2000Tb4b4b4, Te6edf3alphabetTff7b72=Te6edf3stTff7b72.Td2a8ffcharactersTb4b4b4(Te6edf3blacklist_categoriesTff7b72=Tb4b4b4(Ta5d6ff"Ta5d6ffCsTa5d6ff"Tb4b4b4,Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fftest_sanitize_gif_name_fuzzingTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3out Tff7b72= Te6edf3gif_utilsTff7b72.Td2a8ffsanitize_gif_nameTb4b4b4(Te6edf3sTb4b4b4)
Tff7b72assert Te6edf3out Tff7b72is Tff7b72None Tff7b72or Tb4b4b4(
Tffa657isinstanceTb4b4b4(Te6edf3outTb4b4b4, Tffa657strTb4b4b4) Tff7b72and Tffa657lenTb4b4b4(Te6edf3outTb4b4b4) Tff7b72<Tff7b72= T79c0ff128 Tff7b72and Tffa657allTb4b4b4(Te6edf3cTff7b72.Td2a8ffisprintableTb4b4b4(Tb4b4b4) Tff7b72for Te6edf3c Tff7b72in Te6edf3outTb4b4b4)
Tb4b4b4)
Tf0883e@settingsTb4b4b4(Te6edf3max_examplesTff7b72=T79c0ff100Tb4b4b4, Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4)
Tf0883e@givenTb4b4b4(Te6edf3sTff7b72=Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff500Tb4b4b4, Te6edf3alphabetTff7b72=Te6edf3stTff7b72.Td2a8ffcharactersTb4b4b4(Te6edf3blacklist_categoriesTff7b72=Tb4b4b4(Ta5d6ff"Ta5d6ffCsTa5d6ff"Tb4b4b4,Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fftest_sticker_normalize_image_type_fuzzingTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3sticker_utilsTff7b72.Td2a8ffnormalize_image_typeTb4b4b4(Te6edf3sTb4b4b4)
Tf0883e@settingsTb4b4b4(Te6edf3max_examplesTff7b72=T79c0ff100Tb4b4b4, Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4)
Tf0883e@givenTb4b4b4(Te6edf3sTff7b72=Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff500Tb4b4b4, Te6edf3alphabetTff7b72=Te6edf3stTff7b72.Td2a8ffcharactersTb4b4b4(Te6edf3blacklist_categoriesTff7b72=Tb4b4b4(Ta5d6ff"Ta5d6ffCsTa5d6ff"Tb4b4b4,Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fftest_gif_normalize_image_type_fuzzingTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3gif_utilsTff7b72.Td2a8ffnormalize_image_typeTb4b4b4(Te6edf3sTb4b4b4)
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffparametrizeTb4b4b4(
Ta5d6ff"Ta5d6fftitle,short_name,descTa5d6ff"Tb4b4b4,
Tb4b4b4[
Tb4b4b4(Ta5d6ff"Ta5d6ff<script>x</script>Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffok_packTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6fftTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffbad<script>Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffeTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6fftTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff<svg onload=alert(1)>Ta5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffxTa5d6ff" Tff7b72* T79c0ff1000Tb4b4b4, Ta5d6ff"Ta5d6ffyTa5d6ff" Tff7b72* T79c0ff100Tb4b4b4, Ta5d6ff"Ta5d6ffzTa5d6ff" Tff7b72* T79c0ff500Tb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_sticker_pack_sanitizers_accept_malicious_stringsTb4b4b4(Te6edf3titleTb4b4b4, Te6edf3short_nameTb4b4b4, Te6edf3descTb4b4b4)Tb4b4b4:
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3sticker_pack_utilsTff7b72.Td2a8ffsanitize_pack_titleTb4b4b4(Te6edf3titleTb4b4b4)Tb4b4b4) Tff7b72<Tff7b72= T79c0ff80
Te6edf3sn Tff7b72= Te6edf3sticker_pack_utilsTff7b72.Td2a8ffsanitize_pack_short_nameTb4b4b4(Te6edf3short_nameTb4b4b4)
Tff7b72assert Te6edf3sn Tff7b72is Tff7b72None Tff7b72or Tb4b4b4(Tffa657lenTb4b4b4(Te6edf3snTb4b4b4) Tff7b72<Tff7b72= T79c0ff32 Tff7b72and Ta5d6ff"Ta5d6ff<Ta5d6ff" Tff7b72not Tff7b72in Te6edf3snTb4b4b4)
Te6edf3d Tff7b72= Te6edf3sticker_pack_utilsTff7b72.Td2a8ffsanitize_pack_descriptionTb4b4b4(Te6edf3descTb4b4b4)
Tff7b72assert Te6edf3d Tff7b72is Tff7b72None Tff7b72or Tffa657lenTb4b4b4(Te6edf3dTb4b4b4) Tff7b72<Tff7b72= T79c0ff280
Tff7b72def Td2a8fftest_validate_export_document_sticker_xss_fields_parseTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3b64 Tff7b72= Te6edf3base64Tff7b72.Td2a8ffb64encodeTb4b4b4(Te6edf3_TINY_PNGTb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffasciiTa5d6ff"Tb4b4b4)
Te6edf3doc Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffformatTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffmeshchatx-stickersTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffversionTa5d6ff"Tb4b4b4: T79c0ff1Tb4b4b4,
Ta5d6ff"Ta5d6ffstickersTa5d6ff"Tb4b4b4: Tb4b4b4[
Tb4b4b4{
Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff<img src=x onerror=alert(1)>Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffemojiTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff<script>emoji</script>Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffimage_typeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffpngTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffimage_bytesTa5d6ff"Tb4b4b4: Te6edf3b64Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4}
Te6edf3rows Tff7b72= Te6edf3sticker_utilsTff7b72.Td2a8ffvalidate_export_documentTb4b4b4(Te6edf3docTb4b4b4)
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3rowsTb4b4b4) Tff7b72== T79c0ff1
Tff7b72assert Te6edf3rowsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffemojiTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff<script>emoji</script>Ta5d6ff"
Te6edf3sn Tff7b72= Te6edf3sticker_utilsTff7b72.Td2a8ffsanitize_sticker_nameTb4b4b4(Te6edf3rowsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72assert Te6edf3sn Tff7b72is Tff7b72not Tff7b72None Tff7b72and Tffa657lenTb4b4b4(Te6edf3snTb4b4b4) Tff7b72<Tff7b72= T79c0ff128
Te6edf3em Tff7b72= Te6edf3sticker_utilsTff7b72.Td2a8ffsanitize_sticker_emojiTb4b4b4(Te6edf3rowsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffemojiTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72assert Te6edf3em Tff7b72is Tff7b72not Tff7b72None Tff7b72and Tffa657lenTb4b4b4(Te6edf3emTb4b4b4) Tff7b72<Tff7b72= T79c0ff16
Tff7b72def Td2a8fftest_validate_gif_payload_rejects_wrong_magicTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Tf85149ValueErrorTb4b4b4, Te6edf3matchTff7b72=Ta5d6ff"Ta5d6ffsignature|mismatchTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3gif_utilsTff7b72.Td2a8ffvalidate_gif_payloadTb4b4b4(Te6edf3_TINY_PNGTb4b4b4, Ta5d6ff"Ta5d6ffgifTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_validate_gif_payload_accepts_minimal_gifTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3ntTb4b4b4, Te6edf3h Tff7b72= Te6edf3gif_utilsTff7b72.Td2a8ffvalidate_gif_payloadTb4b4b4(Te6edf3_TINY_GIFTb4b4b4, Ta5d6ff"Ta5d6ffgifTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3nt Tff7b72== Ta5d6ff"Ta5d6ffgifTa5d6ff"
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3hTb4b4b4) Tff7b72== T79c0ff64
Tff7b72def Td2a8ff_minimal_lxmf_mock_reactionTb4b4b4(Te6edf3reaction_toTb4b4b4: Tffa657strTb4b4b4, Te6edf3emojiTb4b4b4: Tffa657strTb4b4b4)Tb4b4b4:
Te6edf3m Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3mTff7b72.Td2a8ffhash Tff7b72= Te6edf3osTff7b72.Td2a8ffurandomTb4b4b4(T79c0ff16Tb4b4b4)
Te6edf3mTff7b72.Td2a8ffsource_hash Tff7b72= Te6edf3osTff7b72.Td2a8ffurandomTb4b4b4(T79c0ff16Tb4b4b4)
Te6edf3mTff7b72.Td2a8ffdestination_hash Tff7b72= Te6edf3osTff7b72.Td2a8ffurandomTb4b4b4(T79c0ff16Tb4b4b4)
Te6edf3mTff7b72.Td2a8ffincoming Tff7b72= Tff7b72True
Te6edf3mTff7b72.Td2a8ffstate Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffDELIVERED
Te6edf3mTff7b72.Td2a8ffmethod Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffOPPORTUNISTIC
Te6edf3mTff7b72.Td2a8ffprogress Tff7b72= T79c0ff1.0
Te6edf3mTff7b72.Td2a8ffdelivery_attempts Tff7b72= T79c0ff0
Te6edf3mTff7b72.Td2a8fftitle Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ff"
Te6edf3mTff7b72.Td2a8ffcontent Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ff"
Te6edf3mTff7b72.Td2a8fftimestamp Tff7b72= T79c0ff1.0
Te6edf3mTff7b72.Td2a8ffrssi Tff7b72= Tff7b72None
Te6edf3mTff7b72.Td2a8ffsnr Tff7b72= Tff7b72None
Te6edf3mTff7b72.Td2a8ffq Tff7b72= Tff7b72None
Te6edf3target_bytes Tff7b72= Tff7b72None
Tff7b72tryTb4b4b4:
Te6edf3target_bytes Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3reaction_toTb4b4b4)
Tff7b72except Tf85149ValueErrorTb4b4b4:
Te6edf3target_bytes Tff7b72= Te6edf3reaction_toTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4, Te6edf3errorsTff7b72=Ta5d6ff"Ta5d6ffreplaceTa5d6ff"Tb4b4b4)
Te6edf3mTff7b72.Td2a8ffget_fieldsTff7b72.Td2a8ffreturn_value Tff7b72= Tb4b4b4{
Te6edf3lxmf_utilsTff7b72.Td2a8ffFIELD_REACTIONTb4b4b4: Tb4b4b4{
Te6edf3lxmf_utilsTff7b72.Td2a8ffREACTION_TOTb4b4b4: Te6edf3target_bytesTb4b4b4,
Te6edf3lxmf_utilsTff7b72.Td2a8ffREACTION_CONTENTTb4b4b4: Te6edf3emojiTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4, Te6edf3errorsTff7b72=Ta5d6ff"Ta5d6ffreplaceTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}
Tff7b72return Te6edf3m
Tf0883e@settingsTb4b4b4(Te6edf3max_examplesTff7b72=T79c0ff80Tb4b4b4, Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4)
Tf0883e@givenTb4b4b4(
Te6edf3emojiTff7b72=Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff800Tb4b4b4, Te6edf3alphabetTff7b72=Te6edf3stTff7b72.Td2a8ffcharactersTb4b4b4(Te6edf3blacklist_categoriesTff7b72=Tb4b4b4(Ta5d6ff"Ta5d6ffCsTa5d6ff"Tb4b4b4,Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3reaction_toTff7b72=Te6edf3stTff7b72.Td2a8fftextTb4b4b4(
Te6edf3min_sizeTff7b72=T79c0ff32Tb4b4b4,
Te6edf3max_sizeTff7b72=T79c0ff64Tb4b4b4,
Te6edf3alphabetTff7b72=Ta5d6ff"Ta5d6ff0123456789abcdefTa5d6ff"Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_convert_lxmf_reaction_field_fuzzingTb4b4b4(Te6edf3emojiTb4b4b4, Te6edf3reaction_toTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3reaction_toTb4b4b4) Tff7b72% T79c0ff2 Tff7b72!= T79c0ff0Tb4b4b4:
Te6edf3reaction_to Tff7b72= Te6edf3reaction_to Tff7b72+ Ta5d6ff"Ta5d6ff0Ta5d6ff"
Te6edf3out Tff7b72= Te6edf3lxmf_utilsTff7b72.Td2a8ffconvert_lxmf_message_to_dictTb4b4b4(
Te6edf3_minimal_lxmf_mock_reactionTb4b4b4(Te6edf3reaction_toTb4b4b4, Te6edf3emojiTb4b4b4)Tb4b4b4,
Te6edf3include_attachmentsTff7b72=Tff7b72FalseTb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3outTb4b4b4[Ta5d6ff"Ta5d6ffis_reactionTa5d6ff"Tb4b4b4] Tff7b72is Tff7b72True
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3outTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffreaction_emojiTa5d6ff"Tb4b4b4)Tb4b4b4, Tffa657strTb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3outTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffreaction_toTa5d6ff"Tb4b4b4)Tb4b4b4, Tffa657strTb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3outTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffreaction_senderTa5d6ff"Tb4b4b4)Tb4b4b4, Tffa657strTb4b4b4)
Tff7b72def Td2a8fftest_validate_export_document_gif_xss_namesTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3b64 Tff7b72= Te6edf3base64Tff7b72.Td2a8ffb64encodeTb4b4b4(Te6edf3_TINY_GIFTb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffasciiTa5d6ff"Tb4b4b4)
Te6edf3doc Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffformatTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffmeshchatx-gifsTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffversionTa5d6ff"Tb4b4b4: T79c0ff1Tb4b4b4,
Ta5d6ff"Ta5d6ffgifsTa5d6ff"Tb4b4b4: Tb4b4b4[
Tb4b4b4{
Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffjavascript:alert(1)Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffimage_typeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffgifTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffimage_bytesTa5d6ff"Tb4b4b4: Te6edf3b64Tb4b4b4,
Ta5d6ff"Ta5d6ffusage_countTa5d6ff"Tb4b4b4: T79c0ff0Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4}
Te6edf3rows Tff7b72= Te6edf3gif_utilsTff7b72.Td2a8ffvalidate_export_documentTb4b4b4(Te6edf3docTb4b4b4)
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3rowsTb4b4b4) Tff7b72== T79c0ff1
Tff7b72assert Te6edf3gif_utilsTff7b72.Td2a8ffsanitize_gif_nameTb4b4b4(Te6edf3rowsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffjavascript:alert(1)Ta5d6ff"Tb4b4b4[Tb4b4b4:T79c0ff128Tb4b4b4]
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────